import xss from 'xss'

/**
 * textarea 的回车换行处理
 * @param {String} value
 */
export const formatLine = (value = '') => {
  if (!value) {
    return '<br/>'
  }
  return xss(value.replace(/\r\n/g, '<br/>').replace(/\n/g, '<br/>').replace(/\s/g, ' '))
}

/**
 * 保留小数位
 * @param {String|Number} x
 * @param {Number} fix 要保留的位数
 * @param {Boolean} force 是否强制保留小数位
 * @param {String} fill 空值或0时的填充，默认0
 * @returns {String}
 */
export const fixed = (x, fix = 2, force = false, fill = '0') => {
  let f = Number.parseFloat(x)

  if (isNaN(f)) {
    return force && fix > 0 ? `0.${Array(fix).join('0')}` : fill
  }

  const m = Math.pow(10, fix)
  f = Math.round(f * m) / m

  if (!force || fix <= 0) {
    return f || fill
  }

  const l = f.toString().replace(/\d*\.?(\d+)?/g, '$1').length
  return `${f}${l > 0 ? '' : '.'}${Array(fix - l).join('0')}`
}

/**
 * OSS上传数组拼接成字符串
 * @param {Array} images 字符串数组
 */
export const strFromOss = (images = []) => {
  return images && images.length ? `["${images.map(item => item.url).join('","')}"]` : ''
}

// 格式化文件大小
export const formatFileSize = size => {
  const unit = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
  let index = 0
  while (size >= 1024 && index + 1 < unit.length) {
    index++
    size = size / 1024
  }
  return ~~(size * 100) / 100 + unit[index]
}

export const num = (n, defaultValue = 0) => {
  const v = +n
  return isNaN(v) ? defaultValue : v
}
